package com.keitaitoys.fonteditor.gui.editor;

import javax.swing.undo.AbstractUndoableEdit;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;

import com.keitaitoys.fonteditor.core.FontManager;
import com.keitaitoys.fonteditor.core.LocaleManager;
import com.keitaitoys.fonteditor.font.Font;
import com.keitaitoys.fonteditor.font.Symbol;

public class DeleteUndoableEdit extends AbstractUndoableEdit {
	
	//////////////////////////////////////////////////////////////////////
	// Description ///////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////
	// Consts ////////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	private static final String NAME_LOCALIZE_KEY = "editor.undoableedit.delete.name";
	private static final String UNDO_NAME_LOCALIZE_KEY = "editor.undoableedit.undo.delete.name";
	private static final String REDO_NAME_LOCALIZE_KEY = "editor.undoableedit.redo.delete.name";

	//////////////////////////////////////////////////////////////////////
	// Variables /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	private Symbol symbol;
		
	//////////////////////////////////////////////////////////////////////
	// Constructor ///////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public DeleteUndoableEdit(Symbol symbol) {
		
		this.symbol = symbol;
		
		init();
	}
	
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	private void init() {
		
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public void undo() throws CannotUndoException {
		
		super.undo();

		FontManager fontManager = FontManager.getInstance();
		Font font = fontManager.getFont();
		
		if(font != null) {
			
			font.addSymbol(symbol);
		}
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public void redo() throws CannotRedoException {
		
		super.redo();
		
		FontManager fontManager = FontManager.getInstance();
		Font font = fontManager.getFont();
		
		if(font != null) {
			
			font.removeSymbol(symbol);
		}
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public String getPresentationName() {
		
		LocaleManager localeManager = LocaleManager.getInstance();
		return localeManager.getValue(NAME_LOCALIZE_KEY, symbol.getChar());
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public String getUndoPresentationName() {
		
		LocaleManager localeManager = LocaleManager.getInstance();
		return localeManager.getValue(UNDO_NAME_LOCALIZE_KEY, symbol.getChar());
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public String getRedoPresentationName() {
		
		LocaleManager localeManager = LocaleManager.getInstance();
		return localeManager.getValue(REDO_NAME_LOCALIZE_KEY, symbol.getChar());
	}
}
